#ifndef CFAR_H
#define CFAR_H
#include <vector>
#include <algorithm>

typedef enum
{
    CA_CFAR, // 单元平均CFAR
    GO_CFAR, // 最大选择CFAR
    SO_CFAR, // 最小选择CFAR
    OS_CFAR  // 有序统计CFAR
} CFARType;

// CFAR检测器
class CFARDetector
{
private:
    int guard_cells;
    int training_cells;
    float threshold_factor;
    CFARType cfar_type;

public:
    CFARDetector(int guard, int train, float factor, CFARType type = CA_CFAR)
        : guard_cells(guard), training_cells(train), threshold_factor(factor), cfar_type(type) {}

    // 检测函数
    std::vector<int> detect(const std::vector<float> &power_spectrum);

private:
    // 单元平均CFAR
    float computeCACFARNoise(const std::vector<float> &power_spectrum, int test_cell);

    // 最大选择CFAR
    float computeGOCFARNoise(const std::vector<float> &power_spectrum, int test_cell);

    // 最小选择CFAR
    float computeSOCFARNoise(const std::vector<float> &power_spectrum, int test_cell);

    // 有序统计CFAR
    float computeOSCFARNoise(const std::vector<float> &power_spectrum, int test_cell);
};

#endif